import datetime
from flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()

#提取父类
class BaseModel(db.Model):
    #不生成表
    __abstract__=True
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    create_time = db.Column(db.DateTime,default=datetime.datetime.now())
    update_time = db.Column(db.DateTime,default=datetime.datetime.now())

#### 1.用户表
# 昵称、手机号、密码、头像url、会员等级、总金额
class User(BaseModel):
    __tablename__="user"
    nikename = db.Column(db.String(100),nullable=False,comment="姓名")
    mobile = db.Column(db.String(11),unique=True,comment="手机号")
    password = db.Column(db.String(200),comment="手机号")
    url = db.Column(db.String(255),comment="手机号")
    level = db.Column(db.Integer,default=1,comment="手机号")
    money = db.Column(db.Float)

# #### 2.vip记录表
# 用户id  开始时间  结束时间
class Vip ( BaseModel ) :
    __tablename__ = "vip"
    userid = db.Column ( db.Integer , db.ForeignKey ( 'user.id' ) )
    s_time = db.Column ( db.Date )
    e_time = db.Column ( db.Date )


# #### 3.vip购买记录表
# 用户id、购买年限、金额、折扣、实际支付金额、支付状态
class VipRecord ( BaseModel ) :
    __tablename__ = "vip_record"
    userid = db.Column ( db.Integer , db.ForeignKey ( 'user.id' ) )
    year = db.Column ( db.Integer , default=1 )
    money = db.Column ( db.Float )
    discount = db.Column ( db.Float )
    active_money = db.Column ( db.Float )
    status = db.Column ( db.Integer , default=1 )


# #### 5.三方登录表
# 用户id、三方平台、token、uid
class SfLogin ( BaseModel ) :
    __tablename__ = "sf_login"
    userid = db.Column ( db.Integer , db.ForeignKey ( 'user.id' ) )
    webfrom = db.Column ( db.String ( 30 ) )
    token = db.Column ( db.String ( 100 ) )
    uid = db.Column ( db.String ( 100 ) )


# #### 6.类型表

# 名称
class Ctype ( BaseModel ) :
    __tablename__ = "ctype"
    name = db.Column ( db.String ( 30 ) )


# #### 标签表

# 名称  是否启用
class Tags ( BaseModel ) :
    __tablename__ = "tags"
    status = db.Column ( db.Integer , default=1 )
    name = db.Column ( db.String ( 30 ) )


# #### 分类表

# 名称 、图片Url、 课程总数、描述、时长、总评价数
class CourseType ( BaseModel ) :
    __tablename__ = "course_type"
    name = db.Column ( db.String ( 30 ) )
    url = db.Column ( db.String ( 200 ) )
    number = db.Column ( db.Integer , default=0 )
    times = db.Column ( db.Integer , default=0 )
    tcomment = db.Column ( db.Integer , default=1 )
    descrip = db.Column ( db.Text )


# #### 课程表

# 名称、图片、描述、关注总数、是否发布、浏览次数、所属类型
class Course ( BaseModel ) :
    __tablename__ = "course"
    name = db.Column ( db.String ( 30 ) )
    url = db.Column ( db.String ( 200 ) )
    descrip = db.Column ( db.Text )
    tcount = db.Column ( db.Integer , default=0 )
    views = db.Column ( db.Integer , default=0 )
    is_publish = db.Column ( db.Integer , default=1 )
    ctype = db.Column ( db.Integer , db.ForeignKey ( 'course_type.id' ) )


# # #### 4.vip课程表
# 用户id  课程id
vipuser_course = db.Table ( 'vipuser_course' ,
                            db.Column ( 'courseid' , db.Integer , db.ForeignKey ( 'course.id' ) , primary_key=True ) ,
                            db.Column ( 'userid' , db.Integer , db.ForeignKey ( 'user.id' ) , primary_key=True )
                            )

# #### 课程标签表

# 课程id，标签id
course_tag = db.Table ( 'course_tag' ,
                        db.Column ( 'courseid' , db.Integer , db.ForeignKey ( 'course.id' ) , primary_key=True ) ,
                        db.Column ( 'tagid' , db.Integer , db.ForeignKey ( 'tags.id' ) , primary_key=True )
                        )

# #### 课程分类表
# 课程id，分类id
course_cate = db.Table ( 'course_cate' ,
                         db.Column ( 'courseid' , db.Integer , db.ForeignKey ( 'course.id' ) , primary_key=True ) ,
                         db.Column ( 'course_typeid' , db.Integer , db.ForeignKey ( 'course_type.id' ) ,
                                     primary_key=True )
                         )


# #### 章节表

# 名称  节数  视频url  课程id
class Jie ( BaseModel ) :
    __tablename__ = "jie"
    name = db.Column ( db.String ( 30 ) )
    url = db.Column ( db.String ( 200 ) )
    tcount = db.Column ( db.Integer , default=0 )
    courseid = db.Column ( db.Integer , db.ForeignKey ( 'course.id' ) )


# #### 评论分类表

# 名称
class CommentType ( BaseModel ) :
    __tablename__ = "comment_type"
    name = db.Column ( db.String ( 30 ) )


# #### 评价表

# 标题 总回复数 总查看数 userid  是否最后回复（1是 0否）、 pid、是否置顶,type(1发布 2评论)
class Comment ( BaseModel ) :
    __tablename__ = "comment"
    title = db.Column ( db.String ( 30 ) )
    tcount = db.Column ( db.Integer , default=0 )
    tviews = db.Column ( db.Integer , default=0 )
    is_last = db.Column ( db.Integer , default=0 )
    is_top = db.Column ( db.Integer , default=0 )
    userid = db.Column ( db.Integer , db.ForeignKey ( 'user.id' ) )
    typepid = db.Column ( db.Integer , db.ForeignKey ( 'comment_type.id' ) )
    pid = db.Column ( db.Integer )  # 无限级自关联


# #### 训练营课程表

# 标题、介绍、图片、价格、库存
class Tcourse ( BaseModel ) :
    __tablename__ = "tcourse"
    title = db.Column ( db.String ( 30 ) )
    url = db.Column ( db.String ( 200 ) )
    price = db.Column ( db.Float )
    store = db.Column ( db.Integer , default=999 )
    intro = db.Column ( db.Text )


# #### 购物车

# 用户id、课程id、数量
class Cart ( BaseModel ) :
    __tablename__ = "cart"
    userid = db.Column ( db.Integer )
    cid = db.Column ( db.Integer )
    count = db.Column ( db.Integer )
    is_check = db.Column ( db.Integer )


# #### 订单表

# 订单号、用户id、课程id、数量、单价、总价格、状态、支付宝流水号
class Orders ( BaseModel ) :
    __tablename__ = "orders"
    order_no = db.Column ( db.Integer )
    userid = db.Column ( db.Integer , db.ForeignKey ( 'user.id' ) )
    courseid = db.Column ( db.Integer )
    number = db.Column ( db.Integer )
    price = db.Column ( db.Float )
    tmoney = db.Column ( db.Float )
    status = db.Column ( db.Integer , default=1 )
    trans_no = db.Column ( db.String ( 200 ) )



